// api/task.js - 任务相关接口
import request from './request.js';
import taskMock from './taskMock.js';

/**
 * 任务相关API
 */
export const taskApi = {
  /**
   * 获取任务列表 (支持mock数据)
   * @param {Object} params - 查询参数
   * @param {number} params.page - 页码
   * @param {number} params.pageSize - 每页数量
   * @param {string} params.category - 任务分类
   * @param {string} params.rewardRange - 奖励范围
   * @param {string} params.sort - 排序方式
   * @param {string} params.keyword - 搜索关键词
   * @returns {Promise}
   */
  async getTaskList(params = {}) {
    try {
      // 使用mock数据进行模拟，避免API调用失败
      const defaultParams = {
        page: 1,
        pageSize: 10,
        category: '',
        rewardRange: '',
        sort: 'newest',
        keyword: ''
      };
      
      const queryParams = { ...defaultParams, ...params };
      
      // 模拟网络延迟
      await new Promise(resolve => setTimeout(resolve, 300));
      
      // 1. 过滤任务
      let filteredTasks = taskMock.filterTasks(taskMock.mockTasks, queryParams);
      
      // 2. 排序任务
      let sortedTasks = taskMock.sortTasks(filteredTasks, queryParams.sort);
      
      // 3. 分页处理
      const paginatedResult = taskMock.paginateTasks(sortedTasks, queryParams.page, queryParams.pageSize);
      
      // 返回mock数据结果，模拟后端API响应格式
      return {
        code: 1,
        msg: 'success',
        data: {
          list: paginatedResult.list,
          total: paginatedResult.total,
          page: queryParams.page,
          pageSize: queryParams.pageSize
        }
      };
    } catch (error) {
      console.error('获取任务列表失败:', error);
      // 即使出错也返回mock数据，确保应用不会崩溃
      return {
        code: 0,
        msg: '网络异常，使用模拟数据',
        data: {
          list: taskMock.mockTasks.slice(0, params.pageSize || 10),
          total: taskMock.mockTasks.length
        }
      };
    }
  },
  
  /**
   * 获取任务列表 (原方法，保持兼容性)
   * @param {Object} params - 查询参数
   * @returns {Promise}
   */
  async getTasks(params = {}) {
    try {
      const defaultParams = {
        page: 1,
        pageSize: 10,
        category: '',
        status: '',
        sort: 'recommend', // recommend, hot, new, reward
        keyword: ''
      };
      
      const queryParams = { ...defaultParams, ...params };
      const res = await request.get('/tasks', queryParams);
      return res.data;
    } catch (error) {
      console.error('获取任务列表失败:', error);
      // 出错时返回mock数据，确保应用不崩溃
      return await this.getTaskList(params);
    }
  },

  /**
   * 获取任务详情
   * @param {string} taskId - 任务ID
   * @returns {Promise}
   */
  async getTaskDetail(taskId) {
    try {
      const res = await request.get(`/tasks/detail/${taskId}`);
      return res.data;
    } catch (error) {
      console.error('获取任务详情失败:', error);
      throw error;
    }
  },

  /**
   * 领取任务
   * @param {string} taskId - 任务ID
   * @returns {Promise}
   */
  async claimTask(taskId) {
    try {
      const res = await request.post('/tasks/claim', { task_id: taskId });
      return res.data;
    } catch (error) {
      console.error('领取任务失败:', error);
      throw error;
    }
  },

  /**
   * 提交任务
   * @param {Object} data - 提交数据
   * @param {string} data.task_id - 任务ID
   * @param {Object} data.submit_data - 提交的内容数据
   * @returns {Promise}
   */
  async submitTask(data) {
    try {
      const res = await request.post('/tasks/submit', data);
      return res.data;
    } catch (error) {
      console.error('提交任务失败:', error);
      throw error;
    }
  },

  /**
   * 获取用户任务列表
   * @param {Object} params - 查询参数
   * @param {string} params.status - 任务状态（ongoing/completed）
   * @returns {Promise}
   */
  async getUserTasks(params = {}) {
    try {
      const defaultParams = {
        page: 1,
        pageSize: 10,
        status: 'ongoing' // ongoing, completed
      };
      
      const queryParams = { ...defaultParams, ...params };
      const res = await request.get('/user/tasks', queryParams);
      return res.data;
    } catch (error) {
      console.error('获取用户任务列表失败:', error);
      throw error;
    }
  },

  /**
   * 获取任务分类
   * @returns {Promise}
   */
  async getTaskCategories() {
    try {
      const res = await request.get('/tasks/categories');
      return res.data;
    } catch (error) {
      console.error('获取任务分类失败:', error);
      throw error;
    }
  },

  /**
   * 搜索任务
   * @param {string} keyword - 搜索关键词
   * @returns {Promise}
   */
  async searchTasks(keyword) {
    try {
      const res = await request.get('/tasks/search', { keyword });
      return res.data;
    } catch (error) {
      console.error('搜索任务失败:', error);
      throw error;
    }
  }
};

export default taskApi;